﻿/**
* Скрипт отображающий статистическую информацию
*/
var container = Ext.getCmp(sectionId);
Ext.onReady(function () {
    var sitesPanel = {
        xtype: 'grid',
        frame: true,
        autoScroll: true,
        id: 'sitesGrid',
        store: new Ext.data.JsonStore({
            root: 'data',
            idProperty: 'id',
            fields: [
                'id',
                'url',
                'title',
                'description',
                'status',
                'city',
                'dateCreated',
                'dateModified'
            ]
        }),
        sm: new Ext.grid.RowSelectionModel(),
        colModel: new Ext.grid.ColumnModel({
            defaults: {
                sortable: true,
                resizable: true
            },
            columns: [
                {
                    header: 'ИД',
                    dataIndex: 'id',
                    id: 'sitesIdColumn',
                    width: 50
                },
                {
                    header: 'URL',
                    dataIndex: 'url',
                    id: 'sitesUrlColumn',
                    width: 160,
                    renderer: function(value, metaData, record, rowIndex, colIndex, store) {
                        return '<img src="'+record.data.url+'/favicon.ico'+'" width="16" height="16"/>&nbsp;'+value;
                    }
                },
                {
                    header: 'Название',
                    dataIndex: 'title',
                    id: 'sitesTitleColumn',
                    width: 200
                },
                {
                    header: 'Дата создания',
                    dataIndex: 'dateCreated',
                    id: 'sitesDateCreatedColumn',
                    width: 150
                },
                {
                    header: 'Дата модификации',
                    dataIndex: 'dateModified',
                    id: 'sitesDateModifiedColumn',
                    width: 150
                }
            ]

        }),
        autoExpandColumn: 'sitesUrlColumn',
        tbar: [
            {
                text: 'Все сайты',
                tooltip: 'Отображает все сайты системы',
                handler: function(){
                    loadAllSites();
                }
            },
            {
                text: 'На проверке',
                tooltip: 'Отображает только сайты находящиеся на проверке',
                handler: function(){
                    loadModeratedSites();
                }
            },
            '-',
            {
                text: 'Добавить',
                tooltip: 'Отображает диалог добавления нового сайта',
                handler: function(){
                    showSiteDialog();
                }
            },
            {
                text: 'Редактировать',
                tooltip: 'Отображает диалог редактирования нового сайта',
                handler: function(){
                    var selected = Ext.getCmp('sitesGrid').getSelectionModel().getSelected();
                    if (selected == null){
                        return;
                    }
                    showSiteDialog(selected);
                }
            },
            {
                text: 'Удалить',
                tooltip: 'Удаляет выбранный сайт из каталога',
                handler: function(){
                    var selected = Ext.getCmp('sitesGrid').getSelectionModel().getSelected();
                    if (selected == null){
                        return;
                    }
                    Ext.Msg.show({
                        title: 'Удаление сайта',
                        msg: 'Вы действительно хотите удалить этот сайт из каталога?',
                        buttons: Ext.Msg.YESNO,
                        icon: Ext.Msg.QUESTION,
                        fn: function(txt){
                            if (txt == "yes"){
                                global.Ajax({
                                    url: '/ControlPanel/ManageSites/Delete',
                                    params: {id: selected.data.id},
                                    maskEl: Ext.getCmp('sitesGrid'),
                                    maskMsg: 'Идет удаление сайта',
                                    success: function(data){
                                        Ext.getCmp('sitesGrid').getStore().remove(selected);
                                    }
                                });
                            }
                        }
                    });
                }
            }
        ]
    };

container.add(sitesPanel);
container.doLayout();

    /**
     * Загружает на клиент все сайты зарегистрированные в системе
     */
    function loadAllSites(){
        global.Ajax({
            url: '/ControlPanel/ManageSites/GetSites',
            params: {
                filter: 'all'
            },
            maskEl: Ext.getCmp('sitesGrid'),
            maskMsg: 'Идет загрузка списка сайтов',
            success: function(data){
                Ext.getCmp('sitesGrid').getStore().loadData(data);
            }
        });
    }
    loadAllSites();

    /**
     * Загружает на клиент все сайты находящиеся на проверке
     */
    function loadModeratedSites(){
        global.Ajax({
            url: '/ControlPanel/ManageSites/GetSites',
            params: {
                filter: 'moderated'
            },
            maskEl: Ext.getCmp('sitesGrid'),
            maskMsg: 'Идет загрузка списка сайтов',
            success: function(data){
                Ext.getCmp('sitesGrid').getStore().loadData(data);
            }
        });
    }

    /**
     * Отображает диалог создания или редактирования сайта
     * @param site - сайт
     */
    function showSiteDialog(site){
        var wnd = new Ext.Window({
            title: site != undefined ? "Редактирование сайта "+site.data.title : "Создание сайта",
            resizable: true,
            width: 350,
            height: 500,
            layout: 'fit',
            items: [
                {
                    xtype: 'tabpanel',
                    deferredRender: false,
                    activeTab: 0,
                    items: [
                        {
                            xtype: 'form',
                            id: 'siteForm',
                            title: 'Свойства',
                            labelAlign: 'top',
                            bodyStyle: 'padding: 5px',
                            items: [
                                {
                                    xtype: 'hidden',
                                    id: 'siteIdField',
                                    value: site != undefined ? site.data.id : -1
                                },
                                {
                                    xtype: 'textfield',
                                    allowBlank: false,
                                    id: 'siteUrlField',
                                    fieldLabel: 'URL сайта',
                                    anchor: '100%',
                                    value: site != undefined ? site.data.url : "http://"
                                },
                                {
                                    xtype: 'textfield',
                                    allowBlank: false,
                                    id: 'siteTitleField',
                                    fieldLabel: 'Название',
                                    anchor: '100%',
                                    value: site != undefined ? site.data.title : ""
                                },
                                {
                                    xtype: 'textarea',
                                    allowBlank: false,
                                    id: 'siteDescriptionField',
                                    fieldLabel: 'Описание',
                                    anchor: '100%',
                                    height: 100,
                                    value: site != undefined ? site.data.description : ""
                                },
                                {
                                    xtype: 'combo',
                                    fieldLabel: 'Статус',
                                    id: 'siteStatusField',
                                    mode: 'local',
                                    triggerAction: 'all',
                                    lazyRender: true,
                                    readonly: true,
                                    anchor: '100%',
                                    typeAhead: true,
                                    store: new Ext.data.ArrayStore({
                                        fields: ['id','name'],
                                        data: [
                                            [0,"В работе"],
                                            [1,"На проверке"],
                                            [2,"Заблокирован"]
                                        ]
                                    }),
                                    displayField: 'name',
                                    valueField: 'id',
                                    value: site != undefined ? site.data.status : 0
                                },
                                {
                                    xtype: 'textfield',
                                    allowBlank: true,
                                    id: 'siteCityField',
                                    fieldLabel: 'Город',
                                    readonly: false,
                                    anchor: '100%',
                                    value: site != undefined ? site.data.city : ""
                                }
                            ]
                        },
                        {
                            title: 'Категории',
                            layout: 'fit',
                            items: [
                                {
                                    xtype: 'treepanel',
                                    id: 'siteCategoriesTree',
                                    loader: new Ext.tree.TreeLoader({
                                        url: '/ControlPanel/ManageSites/GetCategories',
                                        baseParams: {
                                            id: site != undefined ? site.data.id : -1
                                        }
                                    }),
                                    root: new Ext.tree.AsyncTreeNode({
                                        id: -1,
                                        text: 'Все категории',
                                        expanded: true
                                    }),
                                    rootVisible: true,
                                    enableDD: false,
                                    animate: false,
                                    autoScroll: true
                                }
                            ]
                        }
                    ]
                }
            ],
            buttons: [
                {
                    text: 'Сохранить',
                    handler: function(){
                        // Валидируем
                        if (!Ext.getCmp('siteForm').getForm().isValid()){
                            Ext.Msg.alert('Ошибка','Пожалуйста, правильно заполните все поля формы');
                            return;
                        }
                        var checkedCategories = Ext.getCmp('siteCategoriesTree').getChecked();
                        if (checkedCategories.length == 0){
                            Ext.Msg.alert('Ошибка','Вы должны выбрать категории, к которым относится новый сайт');
                            return;
                        }

                        // Строим массив выбранных категорий
                        var categories = "";
                        for (var i = 0; i < checkedCategories.length; i++){
                            categories += checkedCategories[i].id+",";
                        }

                        // подготавливаем данные к отправке
                        var params = {
                            id: Ext.getCmp('siteIdField').getValue(),
                            url: Ext.getCmp('siteUrlField').getValue(),
                            title: Ext.getCmp('siteTitleField').getValue(),
                            description: Ext.getCmp('siteDescriptionField').getValue(),
                            status: Ext.getCmp('siteStatusField').getValue(),
                            city: Ext.getCmp('siteCityField').getValue(),
                            categories: categories,
                            dateCreated: new Date()
                        };

                        // Отправляем
                        global.Ajax({
                            url: '/ControlPanel/ManageSites/Save',
                            params: params,
                            maskEl: Ext.getCmp('sitesGrid'),
                            maskMsg: 'Идет сохранение',
                            success: function(data){
                                wnd.close();
                                // В зависимости от того что у нас было: создание или редактирование - вносим изменения в клиентскую модель
                                if (params.id < 0){
                                    // создаем запись в гриде
                                    params.id = data.data.id;
                                    var record = new Ext.data.Record(params);
                                    Ext.getCmp('sitesGrid').getStore().add(record);

                                }
                                else
                                {
                                    site.set("url",params.url);
                                    site.set("title",params.title);
                                    site.set("description",params.description);
                                    site.set("status",params.status);
                                    site.set("city",params.city);
                                    site.set("dateModified",new Date());
                                    site.commit();
                                }
                            }
                        });
                    }
                },
                {
                    text: 'Закрыть',
                    handler: function(){
                        wnd.close();
                    }
                }
            ]
        });
        wnd.show();
    }


});